<?php

namespace app\admin\library;

use think\Db;

/**
 * 自定义字段助手类
 */
class CustomFieldHelper
{
    /**
     * 获取指定模块的自定义字段
     * @param string $moduleName 模块名称：order/product/process/equipment/employee
     * @param string $industryCode 行业代码，为空则获取当前激活行业
     * @return array
     */
    public static function getFields($moduleName, $industryCode = null)
    {
        // 如果没有指定行业，获取当前session中的行业
        if (empty($industryCode)) {
            $industryCode = session('current_industry');
        }
        
        // 如果session中没有，尝试获取默认行业
        if (empty($industryCode)) {
            $industry = Db::name('scanwork_industry_config')
                ->where('is_default', 1)
                ->where('status', 'normal')
                ->find();
            $industryCode = $industry ? $industry['industry_code'] : null;
        }
        
        if (empty($industryCode)) {
            return [];
        }
        
        // 获取该模块的自定义字段
        $fields = Db::name('scanwork_custom_field')
            ->where('industry_code', $industryCode)
            ->where('module_name', $moduleName)
            ->where('status', 'normal')
            ->where('is_visible', 1)
            ->order('sort', 'asc')
            ->select();
        
        return $fields;
    }
    
    /**
     * 渲染自定义字段的HTML
     * @param string $moduleName 模块名称
     * @param array $values 字段值（编辑时传入）
     * @return string
     */
    public static function renderFields($moduleName, $values = [])
    {
        $fields = self::getFields($moduleName);
        
        if (empty($fields)) {
            return '';
        }
        
        $html = '<div class="custom-fields-group">';
        $html .= '<div class="form-group"><div class="col-xs-12"><h4 style="border-bottom: 2px solid #5cb85c; padding-bottom: 10px; margin-bottom: 20px;">行业专属字段</h4></div></div>';
        
        foreach ($fields as $field) {
            $value = isset($values[$field['field_name']]) ? $values[$field['field_name']] : ($field['default_value'] ?? '');
            $required = $field['is_required'] ? 'required' : '';
            $dataRule = $field['is_required'] ? 'data-rule="required"' : '';
            
            $html .= '<div class="form-group">';
            $html .= '<label class="control-label col-xs-12 col-sm-2">' . htmlspecialchars($field['field_label']) . ':</label>';
            $html .= '<div class="col-xs-12 col-sm-8">';
            
            switch ($field['field_type']) {
                case 'text':
                    $html .= '<input type="text" class="form-control" name="custom_fields[' . htmlspecialchars($field['field_name']) . ']" value="' . htmlspecialchars($value ?? '') . '" ' . $dataRule . '>';
                    break;
                    
                case 'number':
                    $html .= '<input type="number" step="any" class="form-control" name="custom_fields[' . htmlspecialchars($field['field_name']) . ']" value="' . htmlspecialchars($value ?? '') . '" ' . $dataRule . '>';
                    break;
                    
                case 'date':
                    $html .= '<input type="date" class="form-control" name="custom_fields[' . htmlspecialchars($field['field_name']) . ']" value="' . htmlspecialchars($value ?? '') . '" ' . $dataRule . '>';
                    break;
                    
                case 'datetime':
                    $html .= '<input type="datetime-local" class="form-control" name="custom_fields[' . htmlspecialchars($field['field_name']) . ']" value="' . htmlspecialchars($value ?? '') . '" ' . $dataRule . '>';
                    break;
                    
                case 'select':
                    $options = json_decode($field['field_options'], true);
                    $html .= '<select class="form-control selectpicker" name="custom_fields[' . htmlspecialchars($field['field_name']) . ']" ' . $dataRule . '>';
                    $html .= '<option value="">请选择</option>';
                    if (is_array($options)) {
                        foreach ($options as $option) {
                            $selected = ($value == $option) ? 'selected' : '';
                            $html .= '<option value="' . htmlspecialchars($option ?? '') . '" ' . $selected . '>' . htmlspecialchars($option ?? '') . '</option>';
                        }
                    }
                    $html .= '</select>';
                    break;
                    
                case 'textarea':
                    $html .= '<textarea class="form-control" name="custom_fields[' . htmlspecialchars($field['field_name']) . ']" rows="3" ' . $dataRule . '>' . htmlspecialchars($value ?? '') . '</textarea>';
                    break;
                    
                case 'checkbox':
                    $options = json_decode($field['field_options'], true);
                    $selectedValues = is_array($value) ? $value : explode(',', $value ?? '');
                    if (is_array($options)) {
                        foreach ($options as $option) {
                            $checked = in_array($option, $selectedValues) ? 'checked' : '';
                            $html .= '<label class="checkbox-inline"><input type="checkbox" name="custom_fields[' . htmlspecialchars($field['field_name']) . '][]" value="' . htmlspecialchars($option ?? '') . '" ' . $checked . '> ' . htmlspecialchars($option ?? '') . '</label>';
                        }
                    }
                    break;
                    
                case 'radio':
                    $options = json_decode($field['field_options'], true);
                    if (is_array($options)) {
                        foreach ($options as $option) {
                            $checked = ($value == $option) ? 'checked' : '';
                            $html .= '<label class="radio-inline"><input type="radio" name="custom_fields[' . htmlspecialchars($field['field_name']) . ']" value="' . htmlspecialchars($option ?? '') . '" ' . $checked . ' ' . $required . '> ' . htmlspecialchars($option ?? '') . '</label>';
                        }
                    }
                    break;
            }
            
            $html .= '</div>';
            $html .= '</div>';
        }
        
        $html .= '</div>';
        
        return $html;
    }
    
    /**
     * 保存自定义字段值
     * @param string $moduleName 模块名称
     * @param int $moduleId 模块记录ID
     * @param array $customFields 自定义字段值
     */
    public static function saveFieldValues($moduleName, $moduleId, $customFields)
    {
        if (empty($customFields) || empty($moduleId)) {
            return;
        }
        
        // 删除旧值
        Db::name('scanwork_custom_field_value')
            ->where('module_name', $moduleName)
            ->where('module_id', $moduleId)
            ->delete();
        
        // 插入新值
        foreach ($customFields as $fieldName => $fieldValue) {
            // 如果是数组（checkbox），转为逗号分隔的字符串
            if (is_array($fieldValue)) {
                $fieldValue = implode(',', $fieldValue);
            }
            
            Db::name('scanwork_custom_field_value')->insert([
                'module_name' => $moduleName,
                'module_id' => $moduleId,
                'field_name' => $fieldName,
                'field_value' => $fieldValue,
                'createtime' => time(),
                'updatetime' => time()
            ]);
        }
    }
    
    /**
     * 获取自定义字段值
     * @param string $moduleName 模块名称
     * @param int $moduleId 模块记录ID
     * @return array
     */
    public static function getFieldValues($moduleName, $moduleId)
    {
        $values = Db::name('scanwork_custom_field_value')
            ->where('module_name', $moduleName)
            ->where('module_id', $moduleId)
            ->column('field_value', 'field_name');
        
        return $values;
    }
}

